package com.tgy.leetcode;

/**
 * @Author: tgy
 * @Date: 12/22/20 11:27 AM
 *
 *  https://leetcode-cn.com/problems/powx-n/
 */
public class _50_Pow {

    public double myPow(double x, int n) {

        if (n == 0) {
            return 1;
        }

        if (n == -1) {

            return 1/x;
        }


        // 由于 -7 >> 1 变成 -4 ，下面的 两个 -4相乘得-8，再乘 x，即为-7
        double result = myPow(x, (n >> 1));

        boolean flag = ((n & 1) == 1);

        // -4 + -4
        result *= result;
        if (flag) {

            // -8 + 1 = -7
            return result * x;
        }

        return result;
    }
}
